import pandas as pd
import os

execl_file_path = 'D:\python_pj\playwright_test\execl\execl_test.xlsx'      # execl文件所在路径
sheet_name = 'add_rma'  # 表名
df = pd.read_excel(     # 读取execl表
    execl_file_path,    # 文件路径
    sheet_name=sheet_name,      # 表名
    # skiprows=None       # 不跳过任何行 第一行会作为表头，但是我第一行不是 所以我要跳过
    skiprows=1       # 跳过第一行 因为我的表格第一行是说明，不是表头
    )  # 读取execl文件

# 判断文件和sheet是否存在
# if os.path.exists(execl_file_path):  # 判断文件路径是否存在
#     pd_execl = pd.ExcelFile(execl_file_path)    # 获取execl
#     pd_sheets = pd_execl.sheet_names    # 获取execl表的所有sheets名称
#
#     if sheet_name in pd_sheets:     # 判断自定义的sheet_name 是否存在execl的sheet_names中
#         df = pd.read_excel( execl_file_path, sheet_name=sheet_name )    # 读取execl表
#     else:
#         print(f"{sheet_name}在execl中不存在")
# else:
#     print("execl文件路径不存在")

print(f"1、读取到多少条行数据：{len(df)}")     # 不包含表头
print(f"2、数据预览：\n {df.head()}")

# ----------读取行数据
print(f"3、读取所有的行数据：{df}")

# 读取指定行数据：索引从0开始，出只从数据开始读取，会带出对应的表头数据
print(f"3.1 读取到的第一行数据是：{df.iloc[0]}")   # 方法1 使用 iloc[行索引]
print(f"3.2 读取到的前两行的数据是：{df.head(2)}")
print(f"3.3 读取指定范围的数据，如第2行-4行数据（索引从0开始，不包含第4行）是：{df.iloc[1:4]}")

print(f"3.4 读取第2行数据，转换成字典输出：{df.iloc[1].to_dict()}")
print(f"3.5 读取第3行数据，转换成列表输出：{df.iloc[2].tolist()}")

# ---------读取列数据
print(f"4、读取所有的列的表头：{df.columns.tolist()}")    # 读取的是表头的数据
print(f"4.1 读取到多少列：{len(df.columns)}")  # 列的长度
print(f"4.2 读取第2列的表头：{df.columns[1]}")
print(f"4.3 读取“城市”这一列的数据：{df["城市"]}")
print(f"4.4 读取第3列的数据是：{df.iloc[:,2]}")

print(f"4.5 [备注列所在下标是：{df.columns.get_loc("备注")}")  # pandas读取的下标是从0开始，execl的下标是从1开始，所以想知道execl表的序号需要+1

# ---------读取单元格
print(f"5、读取第1行第1列的数据是：{df.iloc[0,0]}")     # 方法1 使用iloc[行索引，列索引]
print(f"5.1 读取第2行第2列的数据是：{df.iat[1,1]}")    # 方法2 使用iat[行索引，列索引] 方法（推荐，性能最好）
print(f"5.2 读取第3行城市列的数据是：{df.at[2,"城市"]}")  #方法3 使用at[行索引，列名称] 方法
# print(df.columns)

# 判断列名是否存在
if "猫猫" in df.columns:
    print("存在")
else:
    print("不存在")

# ---------修改单元格的数据
# print(f"6、修改前第一行的备注列的数据：")
# df.at[0,"备注"] = "python写入的备注"   # 直接修改单元格的数据
# df.to_excel(execl_file_path, sheet_name=sheet_name, index=False)    # 修改后需要保存execl文件
# print(f"6、修改后第一行的备注列的数据：")
# ----不太ok 修改完会把我的表结构给该了，第一行数据被删掉了
# ----如果我的表结果，第一行就是表头，就可以用pandas直接去修改


# --------使用openpyxl修改execl表，不会修改表结构
from openpyxl import load_workbook
from openpyxl.styles import PatternFill         # 填充颜色

execl_file_path_1 = 'D:\python_pj\playwright_test\execl\execl_page_url_test.xlsx'      # execl文件所在路径
sheet_name_1 = 'page_url'  # 表名

workbook = load_workbook(execl_file_path_1)   # 加载execl文件
worksheet = workbook[sheet_name_1]    # 操作的表名

# 判断execl和sheet是否存在
if os.path.exists(execl_file_path):  # 判断文件路径是否存在
    workbook = load_workbook(execl_file_path)  # 加载execl
    op_sheets = workbook.sheetnames
    if sheet_name in op_sheets:
        worksheet = workbook[sheet_name]  # openpyxl要操作的表名
    else:
        print(f"sheet[{sheet_name}]在execl表中不存在，请检查！")
else:
    print("execl文件路径不存在")
# head_row = 2    # 表头所在的行 在execl表的第2行
# 如果不知道列所在序号，就需要遍历所有列找到对应列的序号
# 或者通过pandas先获取到对应的下标，再使用openpyxl修改单元格的数据

# 读取的数据包含表头 设置 header=None 表示不需要表头 但如果没有表头的话就不能匹配列名了
df_1 = pd.read_excel(execl_file_path_1, sheet_name=sheet_name_1)
row,col = df_1.shape
print(f"一共有{row}行，{col}列")
print(f"一共多少行：{len(df_1)}")
print(f"{df_1.at[1,"页面路径"]}")


# 读取单元格
w1 = worksheet["A2"].value
w2 = worksheet.cell(row=2, column=1).value

# 修改单元格
worksheet.cell(row=3,column=23,value="openpyxl-python写入备注")     # 修改execl表上第3行第23列的单元格数据
worksheet["W3"] = "openpyxl-python写入备注"   # 方法2

# 填充单元格颜色
fill_red = PatternFill(fill_type="solid", fgColor="CD5C5C")  # 红色 RRGGBB6位
fill_green = PatternFill(fill_type="solid", fgColor="9AFF9A")  # 绿色
worksheet["C4"].fill = fill_red
worksheet.cell(7,1).fill = fill_green

# 填充整行
fill_yellow = PatternFill(fill_type="solid", fgColor="FFF68F")  # 黄色
for col in range(1,worksheet.max_column+1):
    worksheet.cell(row=3,column=col).fill = fill_yellow

# 填充整列
fill_blue = PatternFill(fill_type="solid", fgColor="98F5FF")   # 蓝色
for r in range(1,worksheet.max_row+1):
    worksheet.cell(row=r,column=5).fill = fill_blue

# 填充某个区域
fill_pink = PatternFill(fill_type="solid", fgColor="FFE1FF")   # 粉色
for r in worksheet["H5":"I7"]:
    for cell in r:
        cell.fill = fill_pink

workbook.save(execl_file_path)      # 保存文件

workbook.close()  # 关闭文件

